Clustering of computer systems is becoming an increasingly popular way for enterprises and large businesses to ensure greater availability to multiple users. High Availability (HA) clusters are a class of tightly coupled distributed systems that provide high availability for applications by using hardware redundancy to recover from single points of failure. HA clusters typically include multiple nodes (i.e., computer systems) that interact with each other to provide users with various applications and system resources as a single entity. Each node typically runs a local operating system kernel.
In the event of a hardware or software failure, the HA cluster automatically restarts applications on the same node or “fails over” (i.e., restarts applications on a different node) the applications in order to keep applications available to clients of the cluster. Conventionally, the cluster software is responsible for starting/restarting applications on one or more nodes of the cluster.
Individual software components on the HA cluster are configured as resources. A resource may be any component that is capable of readily being relocated from one node to another node. Typical examples of a resource may be disk volumes, network addresses, software processes, etc. A group of resources that run together on the same node is known as a resource group. When the cluster is initially booted and following any type of failure that takes a resource group offline (i.e., the resource group is no longer running on the node), the resource group is started on one or more nodes to make services available to users. To facilitate the restarting of resource groups on different nodes, each resource group typically includes a list of nodes, i.e., a nodelist, upon which the resource group can run. The nodelist is typically created in order of preference, with the most preferred node occurring first on the list. The nodelist is one of several properties of a resource group.
Alternate methods to increase the availability of resources within an HA cluster are always being developed. One such method involves the creation of resource group dependencies. Dependencies indicate that a first resource group cannot be started until a second resource group (for which the first resource group has a dependency) has already been activated on a particular node.
Resource group dependencies may include components (e.g., properties, associations) that describe the dependencies. For example, typical components may include the category of the dependency, the location of the dependency, the type of dependency, etc. Moreover, these components may be further defined with specific details (e.g., specific locations, types, or categories), which adds to the complexity of the dependencies. In this case, the clustering software uses an algorithm to satisfy all the dependencies when activating a particular resource group on a given node. If this is not possible, services of the resource group remain offline and are unavailable to end users.